Non-volatile data storage devices, such as universal serial bus (USB) flash memory devices or removable storage cards, have allowed for increased portability of data and software applications. Flash memory devices can enhance data storage density by storing multiple bits in each flash memory cell. For example, Multi-Level Cell (MLC) flash memory devices provide increased storage density by storing 3 bits per cell, 4 bits per cell, or more. Although increasing the number of bits per cell and reducing device feature dimensions may increase a storage density of a memory device, a bit error rate of data stored at the memory device may also increase.
Error correction coding (ECC) is often used to correct errors that occur in data read from a memory device. Prior to storage, data may be encoded by an ECC encoder to generate redundant information (e.g. “parity bits”) that may be stored with the data as an ECC codeword. As more parity bits are used, an error correction capacity of the ECC increases and a number of bits required to store the encoded data also increases.
As data transfer speeds increase between components within a data storage device, such as on a bus between a memory controller and a flash memory, a possibility of errors occurring in data during transmission between components may also increase. To accommodate a larger potential number of errors in data due to an increase in such transmission errors, a larger error correction capacity of the ECC may be used. However, providing a larger error correction capacity at an ECC engine may increase a decoding latency and a power consumption of the ECC engine. Use of a larger number of parity bits to provide increased error correction capacity may increase a latency due to longer codewords transferred between components within the data storage device and may reduce an overall storage capacity of the memory device as more parity bits are stored for each codeword. Because transmission errors may be caused by different mechanism than storage errors, using a same large error correction code for both transmission errors and for storage errors may introduce inefficiencies.